今天繼續學習,加油!
昨天複習了一點點pytorch code,
今天就直接來實戰看看!盡力做到每一行code都解釋,希望可以幫助其他也一樣的新人,還有自己複習.
首先第一部份一定是先import一堆工具包,
import torch
import torch.nn as nn
from torch.autograd import Variable
import torch.utils.data as Data
import torchvision
import matplotlib.pyplot as plt
分別解釋一下是幹麻的:
import torch: 使用pytorch框架
import torch.nn as nn: 使用neural network模塊,所有網路的基本類別
from torch.autograd import Variable: variable像一個容器,可以容納tensor在裡面計算.
import torch.utils.data as Data: 隨機抽取data的工具,隨機mini-batch
import torchvision: 用來生成圖片影片的數據集,流行的pretrained model
import matplotlib.pyplot as plt: 輸出圖片工具包
接著設置hyperparameter
EPOCH = 10 #全部data訓練10次
BATCH_SIZE = 50 #每次訓練隨機丟50張圖像進去
LR =0.001 #learning rate
DOWNLOAD_MNIST = False #第一次用要先下載data,所以是True
if_use_gpu = 1 #使用gpu
開始生成train data
train_data = torchvision.datasets.MNIST(
root='./mnist',
train=True,
transform=torchvision.transforms.ToTensor(),
#把灰階從0~255壓縮到0~1
download=DOWNLOAD_MNIST
)
可以輸出看看train data size
print(train_data.train_data.size())
print(train_data.train_labels.size())
乾脆畫出來看看
plt.imshow(train_data.train_data[0].numpy(),cmap='gray')
plt.title('%i' % train_data.train_labels[0])
plt.show()
#show 出train data set 中第一張影像
隨機讀training dataset
train_loader = Data.DataLoader(dataset = train_data, batch_size = BATCH_SIZE, shuffle=True)
#shuffle是隨機從data裡讀去資料.
做test data
test_data = torchvision.datasets.MNIST(
root='./mnist/',
train=False,
transform=torchvision.transforms.ToTensor(),
download=DOWNLOAD_MNIST,
)
test data 前處理,把它降維放到variable中
test_x = Variable(torch.unsqueeze(test_data.test_data, dim=1).float(), requires_grad=False)
# requires_grad=False 不參與反向傳播,test data 不用做
test_y = test_data.test_labels
以上就是資料的前處理部份,有時候看github,大神們習慣把它和model,train 分開寫成不同scripts. 但是我MNIST還算滿簡單的,所以就直接寫成一個,打這段是因為一開始看github眼花撩亂,東西太多又看不懂程式碼,浪費了很多時間...
另外Variable現在好像已經過時了...
詳情可以看這邊:
https://pytorch.org/docs/stable/autograd.html#variable
不過還是可以用variable喔~還是可以跑.
之後有空在熟悉新用法吧.
明天開始神經網路搭建~